﻿using System;
using System.IO;
using System.Reflection;

namespace HypothesisTester
{
    /// <summary>
    /// Для работы с Exmbedded Resource
    /// (класс должен быть описан в том же проекте(namespace) что и Exmbedded Resource)
    /// PK 2012
    /// </summary>
    public class hlpExtRes
    {
        private static volatile hlpExtRes instance;
        private readonly static object syncRoot = new Object();

        public static hlpExtRes SinglInstance
        {
            get
            {
                // DCL
                if (instance == null)
                {
                    lock (syncRoot)
                    {
                        if (instance == null)
                        {
                            instance = new hlpExtRes();
                        }
                    }
                }

                return instance;
            }
        }
        
        
        /// <summary>
        /// Получить текст файла в проекте
        /// помеченного как EmbeddedResource
        /// если файл не в корне проекта, то путь пишем разделяя "."
        /// </summary>
        /// <param name="resourceName">Имя файла и расширение</param>
        /// <returns></returns>
        public string GetFromEmbeddedResourcesString(string resourceName)
        {
            string ret = null;

            using (Stream stream = GetFromEmbeddedResourcesStream(resourceName))
            {
                using (var reader = new StreamReader(stream))
                {
                    ret = reader.ReadToEnd();
                }
            }

            return ret;
        }

        /// <summary>
        /// Получить поток файла в проекте
        /// помеченного как EmbeddedResource
        /// если файл не в корне проекта, то путь пишем разделяя "."
        /// </summary>
        /// <param name="resourceName">Имя файла и расширение</param>
        /// <returns></returns>
        public Stream GetFromEmbeddedResourcesStream(string resourceName)
        {
            string manifestResourceName = string.Format("{0}.{1}", this.GetType().Namespace, resourceName);
            Assembly assem = this.GetType().Assembly;
            Stream stream = assem.GetManifestResourceStream(manifestResourceName);
            
            return stream;
        }

    }
}
